{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第一步查看数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入相应库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import sys\n",
    "# %matplotlib notebook\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 解决matplotlib显示中文问题\n",
    "# 仅适用于Windows\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题\n",
    "df=pd.read_csv(r'.\\Titanic Machine Learning from Disaster\\train.csv')\n",
    "df_test=pd.read_csv(r'.\\Titanic Machine Learning from Disaster\\test.csv')\n",
    "passengerId=df_test['PassengerId']\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      "PassengerId    891 non-null int64\n",
      "Survived       891 non-null int64\n",
      "Pclass         891 non-null int64\n",
      "Name           891 non-null object\n",
      "Sex            891 non-null object\n",
      "Age            714 non-null float64\n",
      "SibSp          891 non-null int64\n",
      "Parch          891 non-null int64\n",
      "Ticket         891 non-null object\n",
      "Fare           891 non-null float64\n",
      "Cabin          204 non-null object\n",
      "Embarked       889 non-null object\n",
      "dtypes: float64(2), int64(5), object(5)\n",
      "memory usage: 83.6+ KB\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>714.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.383838</td>\n",
       "      <td>2.308642</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>257.353842</td>\n",
       "      <td>0.486592</td>\n",
       "      <td>0.836071</td>\n",
       "      <td>14.526497</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>223.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.125000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>28.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>668.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>38.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       PassengerId    Survived      Pclass         Age       SibSp  \\\n",
       "count   891.000000  891.000000  891.000000  714.000000  891.000000   \n",
       "mean    446.000000    0.383838    2.308642   29.699118    0.523008   \n",
       "std     257.353842    0.486592    0.836071   14.526497    1.102743   \n",
       "min       1.000000    0.000000    1.000000    0.420000    0.000000   \n",
       "25%     223.500000    0.000000    2.000000   20.125000    0.000000   \n",
       "50%     446.000000    0.000000    3.000000   28.000000    0.000000   \n",
       "75%     668.500000    1.000000    3.000000   38.000000    1.000000   \n",
       "max     891.000000    1.000000    3.000000   80.000000    8.000000   \n",
       "\n",
       "            Parch        Fare  \n",
       "count  891.000000  891.000000  \n",
       "mean     0.381594   32.204208  \n",
       "std      0.806057   49.693429  \n",
       "min      0.000000    0.000000  \n",
       "25%      0.000000    7.910400  \n",
       "50%      0.000000   14.454200  \n",
       "75%      0.000000   31.000000  \n",
       "max      6.000000  512.329200  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数据的基本信息概览\n",
    "df.info()\n",
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**可以看出有三列是有缺失值的，分别是 Age年龄,Cabin船舱号,Embarked上船地点**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PassengerId    False\n",
       "Survived       False\n",
       "Pclass         False\n",
       "Name           False\n",
       "Sex            False\n",
       "Age             True\n",
       "SibSp          False\n",
       "Parch          False\n",
       "Ticket         False\n",
       "Fare           False\n",
       "Cabin           True\n",
       "Embarked        True\n",
       "dtype: bool"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看有缺失值的列\n",
    "# len(df[df.isnull().values==True])    886行\n",
    "df.isnull().any()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分别查看各列缺失值占的比例\n",
    "***\n",
    "- 可以看到Cabin缺失值过多，可以删除这一列\n",
    "- Age这一列缺失值不是很多，可以通过插值，或者取平均值填补空缺\n",
    "- Embarked这一列缺失值很少，可以直接删除有缺失值的行dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Age的缺失值比例是： 0.19865319865319866\n",
      "Cabin的缺失值比例是： 0.7710437710437711\n",
      "Embarked的缺失值比例是： 0.002244668911335578\n"
     ]
    }
   ],
   "source": [
    "age_none=df['Age'].isnull().values\n",
    "cabin_none=df['Cabin'].isnull().values\n",
    "embarked_none=df['Embarked'].isnull().values\n",
    "\n",
    "print('Age的缺失值比例是：',len(age_none[age_none==True])/len(df))\n",
    "print('Cabin的缺失值比例是：',len(cabin_none[cabin_none==True])/len(df))\n",
    "print('Embarked的缺失值比例是：',len(embarked_none[embarked_none==True])/len(df))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** 有缺失值的是Age年龄，Fare费用，Cabin船舱编号，这里Embarked是完整的 **"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PassengerId    False\n",
       "Pclass         False\n",
       "Name           False\n",
       "Sex            False\n",
       "Age             True\n",
       "SibSp          False\n",
       "Parch          False\n",
       "Ticket         False\n",
       "Fare            True\n",
       "Cabin           True\n",
       "Embarked       False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_test.isnull().any()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Age的缺失值比例是： 0.20574162679425836\n",
      "Cabin的缺失值比例是： 0.7822966507177034\n",
      "Fare的缺失值比例是： 0.0023923444976076554\n"
     ]
    }
   ],
   "source": [
    "age_none=df_test['Age'].isnull().values\n",
    "cabin_none=df_test['Cabin'].isnull().values\n",
    "Fare_none=df_test['Fare'].isnull().values\n",
    "\n",
    "print('Age的缺失值比例是：',len(age_none[age_none==True])/len(df_test))\n",
    "print('Cabin的缺失值比例是：',len(cabin_none[cabin_none==True])/len(df_test))\n",
    "print('Fare的缺失值比例是：',len(Fare_none[Fare_none==True])/len(df_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#对这三列进行处理,先删去Cabin列，然后按性别平均值填补Age，最后dropna()删去空缺行\n",
    "df_s=df.drop(['Cabin','Ticket'],axis=1)#删除Cabin列\n",
    "df_test.drop(['Cabin','Ticket'],axis=1,inplace=True)\n",
    "combine=[df_s,df_test]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**按照性别填充数据**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 进行数据转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'Master', 'Miss', 'Mme', 'Mlle', 'Rare', 'Mrs', 'Ms', 'Mr'}\n",
      "{'Master', 'Miss', 'Rare', 'Mrs', 'Ms', 'Mr'}\n"
     ]
    }
   ],
   "source": [
    "#对名字进行分类\n",
    "for data in combine:\n",
    "    data['Sex']=data['Sex'].map({'female':0,'male':1}).astype(int)\n",
    "    \n",
    "    data['title']=data['Name'].str.extract('([A-Za-z]+)\\.',expand=False)\n",
    "    pd.crosstab(data['title'], data['Sex'])\n",
    "    data['title']=data['title'].replace(['Lady', 'Countess','Capt', 'Col',\\\n",
    "         'Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'],'Rare')\n",
    "    \n",
    "    print(set(data['title'].values))\n",
    "    data['title'] = data['title'].replace('Mlle', 'Miss')\n",
    "    data['title'] = data['title'].replace('Ms', 'Miss')\n",
    "    data['title'] = data['title'].replace('Mme', 'Mrs')\n",
    "    \n",
    "    title_mapping = {\"Mr\": 1, \"Miss\": 2, \"Mrs\": 3, \"Master\": 4, \"Rare\": 5}\n",
    "    data['title']=data['title'].map(title_mapping)\n",
    "    data.drop(['Name','PassengerId'],axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pclass      False\n",
       "Sex         False\n",
       "Age          True\n",
       "SibSp       False\n",
       "Parch       False\n",
       "Fare         True\n",
       "Embarked    False\n",
       "title       False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# df_s.isnull().any()\n",
    "# # len(df_s)\n",
    "df_test.isnull().any()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "#填补年龄\n",
    "guess_ages = np.zeros((2,3))\n",
    "for data in combine:\n",
    "    for i in range(0,2):\n",
    "        for j in range(0,3):\n",
    "            guess_df=data[(data['Sex']==i)&(data['Pclass']==j+1)]['Age'].dropna()\n",
    "            age_guess=guess_df.median()\n",
    "            guess_ages[i,j] = int(age_guess/0.5 + 0.5 )* 0.5\n",
    "    for i in range(0,2):\n",
    "        for j in range(0,3):\n",
    "            data.loc[(data['Age'].isnull())&(data['Sex']==i)&(data['Pclass']==j+1),'Age']=guess_ages[i,j]\n",
    "    data['Age'] = data['Age'].astype(int)\n",
    "# df_s.dropna(inplace=True)#删除很少有缺失值的Embarked列中所属行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Survived    False\n",
       "Pclass      False\n",
       "Sex         False\n",
       "Age         False\n",
       "SibSp       False\n",
       "Parch       False\n",
       "Fare        False\n",
       "Embarked     True\n",
       "title       False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_s.isnull().any()\n",
    "# # len(df_s)\n",
    "# df_test.isnull().any()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 年龄分段处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>AgeBand</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>(-0.08, 16.0]</td>\n",
       "      <td>0.550000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>(16.0, 32.0]</td>\n",
       "      <td>0.337374</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>(32.0, 48.0]</td>\n",
       "      <td>0.412037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>(48.0, 64.0]</td>\n",
       "      <td>0.434783</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>(64.0, 80.0]</td>\n",
       "      <td>0.090909</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         AgeBand  Survived\n",
       "0  (-0.08, 16.0]  0.550000\n",
       "1   (16.0, 32.0]  0.337374\n",
       "2   (32.0, 48.0]  0.412037\n",
       "3   (48.0, 64.0]  0.434783\n",
       "4   (64.0, 80.0]  0.090909"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_s['AgeBand']=pd.cut(df_s['Age'],5)\n",
    "df_s[['AgeBand','Survived']].groupby(['AgeBand'],as_index=False).mean().sort_values(by='AgeBand',ascending=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>title</th>\n",
       "      <th>AgeBand</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>(16.0, 32.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "      <td>(32.0, 48.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>(16.0, 32.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "      <td>(32.0, 48.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>(32.0, 48.0]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age  SibSp  Parch     Fare Embarked  title  \\\n",
       "0         0       3    1    1      1      0   7.2500        S      1   \n",
       "1         1       1    0    2      1      0  71.2833        C      3   \n",
       "2         1       3    0    1      0      0   7.9250        S      2   \n",
       "3         1       1    0    2      1      0  53.1000        S      3   \n",
       "4         0       3    1    2      0      0   8.0500        S      1   \n",
       "\n",
       "        AgeBand  \n",
       "0  (16.0, 32.0]  \n",
       "1  (32.0, 48.0]  \n",
       "2  (16.0, 32.0]  \n",
       "3  (32.0, 48.0]  \n",
       "4  (32.0, 48.0]  "
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "for dataset in combine:\n",
    "    dataset.loc[dataset['Age']<=16,'Age']=0\n",
    "    dataset.loc[(dataset['Age'] > 16) & (dataset['Age'] <= 32), 'Age'] = 1\n",
    "    dataset.loc[(dataset['Age'] > 32) & (dataset['Age'] <= 48), 'Age'] = 2\n",
    "    dataset.loc[(dataset['Age'] > 48) & (dataset['Age'] <= 64), 'Age'] = 3\n",
    "    dataset.loc[ dataset['Age'] > 64, 'Age']=4\n",
    "df_s.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "df_s.drop(['AgeBand'],axis=1,inplace=True)\n",
    "combine=[df_s,df_test]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 处理家庭中的人数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>FamilySize</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>11</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0.136364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.303538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.552795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0.578431</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0.724138</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   FamilySize  Survived\n",
       "7           8  0.000000\n",
       "8          11  0.000000\n",
       "5           6  0.136364\n",
       "4           5  0.200000\n",
       "0           1  0.303538\n",
       "6           7  0.333333\n",
       "1           2  0.552795\n",
       "2           3  0.578431\n",
       "3           4  0.724138"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['FamilySize']=dataset['SibSp']+dataset['Parch']+1\n",
    "df_s[['FamilySize','Survived']].groupby('FamilySize',as_index=False).mean().sort_values(by='Survived',ascending=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>IsAlone</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.505650</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.303538</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   IsAlone  Survived\n",
       "0        0  0.505650\n",
       "1        1  0.303538"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['IsAlone']=0\n",
    "    dataset.loc[dataset['FamilySize']==1,'IsAlone']=1\n",
    "df_s[['IsAlone','Survived']].groupby(['IsAlone'],as_index=False).mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>title</th>\n",
       "      <th>IsAlone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age     Fare Embarked  title  IsAlone\n",
       "0         0       3    1    1   7.2500        S      1        0\n",
       "1         1       1    0    2  71.2833        C      3        0\n",
       "2         1       3    0    1   7.9250        S      2        1\n",
       "3         1       1    0    2  53.1000        S      3        0\n",
       "4         0       3    1    2   8.0500        S      1        1"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_s = df_s.drop(['Parch', 'SibSp', 'FamilySize'], axis=1)\n",
    "df_test = df_test.drop(['Parch', 'SibSp', 'FamilySize'], axis=1)\n",
    "combine = [df_s, df_test]\n",
    "df_s.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 填充和转换Embarked"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "freq_port =df_s.Embarked.dropna().mode()[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df_s['Embarked'].fillna(freq_port,inplace=True)\n",
    "combine=[df_s,df_test]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>title</th>\n",
       "      <th>IsAlone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age     Fare  Embarked  title  IsAlone\n",
       "0         0       3    1    1   7.2500         0      1        0\n",
       "1         1       1    0    2  71.2833         1      3        0\n",
       "2         1       3    0    1   7.9250         0      2        1\n",
       "3         1       1    0    2  53.1000         0      3        0\n",
       "4         0       3    1    2   8.0500         0      1        1"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Embarked']=dataset['Embarked'].map({'S': 0, 'C': 1, 'Q': 2}).astype(int)\n",
    "df_s.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 离散化并且转换Fare"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>title</th>\n",
       "      <th>IsAlone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pclass  Sex  Age     Fare  Embarked  title  IsAlone\n",
       "0       3    1    2   7.8292         2      1        1\n",
       "1       3    0    2   7.0000         0      3        0\n",
       "2       2    1    3   9.6875         2      1        1\n",
       "3       3    1    1   8.6625         0      1        1\n",
       "4       3    0    1  12.2875         0      3        0"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_test['Fare'].fillna(df_test['Fare'].dropna().median(),inplace=True)#填充测试集的Fare特征\n",
    "df_test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df_s['FareBand']=pd.qcut(df_s['Fare'],4)\n",
    "df_s[['FareBand','Survived']].groupby(['FareBand'],as_index=False).mean().sort_values(by='FareBand',ascending=True)\n",
    "combine=[df_s,df_test]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>title</th>\n",
       "      <th>IsAlone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age  Fare  Embarked  title  IsAlone\n",
       "0         0       3    1    1     0         0      1        0\n",
       "1         1       1    0    2     3         1      3        0\n",
       "2         1       3    0    1     1         0      2        1\n",
       "3         1       1    0    2     3         0      3        0\n",
       "4         0       3    1    2     1         0      1        1"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset.loc[dataset['Fare']<7.91,'Fare']=0\n",
    "    dataset.loc[(dataset['Fare'] > 7.91) & (dataset['Fare'] <= 14.454), 'Fare'] = 1\n",
    "    dataset.loc[(dataset['Fare'] > 14.454) & (dataset['Fare'] <= 31), 'Fare']   = 2\n",
    "    dataset.loc[ dataset['Fare'] > 31, 'Fare'] = 3\n",
    "    dataset['Fare'] = dataset['Fare'].astype(int)\n",
    "df_s=df_s.drop('FareBand',axis=1)\n",
    "combine=[df_s,df_test]\n",
    "df_s.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 不同特征之间的关联\n",
    "***\n",
    "- 从表格可以看出，是否存活和性别的负相关最严重\n",
    "- 其次是和经济社会地位的负相关\n",
    "- SibSp和Parch之间的正相关是很明显的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>title</th>\n",
       "      <th>IsAlone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Survived</th>\n",
       "      <td>0.0000</td>\n",
       "      <td>-0.3385</td>\n",
       "      <td>-0.5434</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.2959</td>\n",
       "      <td>0.1068</td>\n",
       "      <td>0.4078</td>\n",
       "      <td>-0.2034</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass</th>\n",
       "      <td>-0.3385</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.1319</td>\n",
       "      <td>-0.4188</td>\n",
       "      <td>-0.6285</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>-0.1739</td>\n",
       "      <td>0.1352</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sex</th>\n",
       "      <td>-0.5434</td>\n",
       "      <td>0.1319</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>-0.2489</td>\n",
       "      <td>-0.1166</td>\n",
       "      <td>-0.5027</td>\n",
       "      <td>0.3036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Age</th>\n",
       "      <td>0.0000</td>\n",
       "      <td>-0.4188</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.1299</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.1372</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fare</th>\n",
       "      <td>0.2959</td>\n",
       "      <td>-0.6285</td>\n",
       "      <td>-0.2489</td>\n",
       "      <td>0.1299</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.3417</td>\n",
       "      <td>-0.5689</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Embarked</th>\n",
       "      <td>0.1068</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>-0.1166</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>title</th>\n",
       "      <td>0.4078</td>\n",
       "      <td>-0.1739</td>\n",
       "      <td>-0.5027</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.3417</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>-0.4058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IsAlone</th>\n",
       "      <td>-0.2034</td>\n",
       "      <td>0.1352</td>\n",
       "      <td>0.3036</td>\n",
       "      <td>0.1372</td>\n",
       "      <td>-0.5689</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>-0.4058</td>\n",
       "      <td>0.0000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Survived  Pclass     Sex     Age    Fare  Embarked   title  IsAlone\n",
       "Survived    0.0000 -0.3385 -0.5434  0.0000  0.2959    0.1068  0.4078  -0.2034\n",
       "Pclass     -0.3385  0.0000  0.1319 -0.4188 -0.6285    0.0000 -0.1739   0.1352\n",
       "Sex        -0.5434  0.1319  0.0000  0.0000 -0.2489   -0.1166 -0.5027   0.3036\n",
       "Age         0.0000 -0.4188  0.0000  0.0000  0.1299    0.0000  0.0000   0.1372\n",
       "Fare        0.2959 -0.6285 -0.2489  0.1299  0.0000    0.0000  0.3417  -0.5689\n",
       "Embarked    0.1068  0.0000 -0.1166  0.0000  0.0000    0.0000  0.0000   0.0000\n",
       "title       0.4078 -0.1739 -0.5027  0.0000  0.3417    0.0000  0.0000  -0.4058\n",
       "IsAlone    -0.2034  0.1352  0.3036  0.1372 -0.5689    0.0000 -0.4058   0.0000"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n8jczK6H/DwKVzinZ8xCIAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f838de9048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "corr=df_s.corr()\n",
    "corr[corr==1]=0#基本处理，让表格看起来更方便\n",
    "corr[abs(corr)<0.1]=0\n",
    "\n",
    "sns.heatmap(corr,\n",
    "            xticklabels=corr.columns.values,\n",
    "            yticklabels=corr.columns.values)\n",
    "\n",
    "# sns.pairplot(df_s,hue='Survived',size=10,diag_kind='kde')\n",
    "# plt.savefig(r'D:\\Data\\Titanic Machine Learning from Disaster\\df_s_corr.png')\n",
    "corr_t=corr.round(4)\n",
    "corr_t"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**男性的存活率大约16%低于女性的26%**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'不同性别的存活人数')"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f8373939b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(x='Sex',hue='Survived',data=df_s).set_title('不同性别的存活人数')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据的大致分布\n",
    "***\n",
    "- 年龄基本服从高斯分布，20到40岁的人居多\n",
    "- 经济社会地位中第3等级的人最多，但是1和2的总人数和3相当\n",
    "- SlibSp中0的最多，身边没有兄弟姐妹或者配偶\n",
    "- Fare中取值一般都比较低\n",
    "- Embarked很多都是在2号港口上船的\n",
    "- Parch的分布和SliSp的分布基本一致，也是没有照看的人"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# f, axes = plt.subplots(nrows=2,ncols=3, figsize=(15, 10))\n",
    "\n",
    "# sns.distplot(df_s['Age'],kde=False,color='r',ax=axes[0][0]).set_title('Age')\n",
    "# axes[0][0].set_ylabel('People Count')\n",
    "\n",
    "# sns.distplot(df_s['Pclass'],kde=False,color='b',ax=axes[0][1]).set_title('Pclass')\n",
    "# axes[0][1].set_ylabel('People Count')\n",
    "\n",
    "# sns.distplot(df_s['SibSp'],kde=False,color='y',ax=axes[0][2]).set_title('SibSp')\n",
    "# axes[0][2].set_ylabel('People Count')\n",
    "\n",
    "# sns.distplot(df_s['Fare'],kde=False,color='y',ax=axes[1][0]).set_title('Fare')\n",
    "# axes[1][0].set_ylabel('People Count')\n",
    "\n",
    "# sns.distplot(df_s['Embarked'],kde=False,color='b',ax=axes[1][1]).set_title('Embarked')\n",
    "# axes[1][1].set_ylabel('Sex')\n",
    "\n",
    "# sns.distplot(df_s['Parch'],kde=False,color='r',ax=axes[1][2]).set_title('Parch')\n",
    "# axes[1][2].set_ylabel('Parch')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " ## Survived VS Age\n",
    "***\n",
    "* 两条曲线的分布很相似，可以理解为年龄段人数多的地方，生存下来的人数和未幸存下来的人数也会多"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'Age Distribution-Survived VS not Survived')"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nTB5bgK8YY67GL82sxR8JEhEREUmIRvBERERERESmCM3BExERERERmSKU4ImIiIiIiEwRSvBERERE\nRESmiLRpstLU1OYVF+fQ0tI58s4y7elZkUTpWZHR0PMiidKzIonSsyKJKi7OIRgMOCPtl1YjeMFg\nINUhSJrQsyKJ0rMio6HnRRKlZ0USpWdFEpXos5JWCZ6IiIiIiIgMTQmeiIiIiIjIFKEET0RERERE\nZIpQgiciIiIiIjJFKMETERERERGZIpTgiYiIiIiITBFK8ERERERERKYIJXgiIiIiIjLl/PGPvycc\nDh+0LRqNcuutN/Pv//5ZrrvuGq6//ovs3Fl/RNe54YavEQqFxnz81Vd/jIaGXUcUw0BK8ERERERE\nZMq5775fE4lEDtr22msvs3dvEz/+8c+5+eafceml7+XWW28+out861vfJSMj44jOMZ6CqQ5ARERE\nRERkJE888RivvPISPT3d7NxZz0c+8q9ccsllbNmymVtu+SGBQIDMzEyuv/4brFz5Kvv2NXPjjV/n\nu9+9qe8c5eWVbN68iWee+QunnHI6b33reZx11jkAXHnlZfzmN78jKyuLX/ziVubPX0Bl5Sx+8Ytb\nycjI4NRTT2ft2tX89Ke3A3D99f/OJz/5ab7+9f/g3nsf4KqrPsLdd99PdnY2v/3tvQQCAc4//x38\n4Affobe3h8zMLK6//utUVFTyy1/exmuvvUJFRQX797eO631Sgici05LneUR2N7D3ta20rlwNkQgF\nH/8Ubl5+qkMTERGZ9Dr+9Ad61q8Z13NmnXgyuZdePvx1O9q5+eafUVdXy1e+8kUuueQyvv/9/+ar\nX/0GS5YYXnzxeX72s5v59rd/wN1338WNN37noOMXLVrMV77yDf74x9/z4x//iLKycj7/+S9y8smn\nDHnN3t5e7rjjHgA+9amraGxsIBjMoLW1laVLjwEgEAhy3nlv5/nnn+Hiiy/l6af/wi23/Iybbvo+\nV175Qc466xxWrnyd22//Gf/yLx9j3bo13HnnvXR1dfJP//S+I7xzB1OCJyLThheNEtqymd5Nb9C7\n6U2iLfsOer3tf39Nwb99DicQSFGEIiIiMpzFi5cCUF5eQW9vLwB79zaxZIkBYPnyt3D77T8b8vht\n27Yyb958vvWt7+B5HitWvMY3v/k1Hn30zwft53le38fz5s3v+/jSS9/LU089TkZGBpdcctlBx1x2\n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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f83a5f6cf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(15,5))\n",
    "sns.set(palette='muted',color_codes=True)\n",
    "ax=sns.kdeplot(data=df_s.loc[df_s['Survived']==0]['Age'],color='r',shade=True,label='not Survived')\n",
    "ax=sns.kdeplot(data=df_s.loc[df_s['Survived']==1]['Age'],color='b',shade=True,label='Survived')\n",
    "ax.set(xlabel='Age',ylabel='Frequency')\n",
    "plt.title(\"Age Distribution-Survived VS not Survived\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Survived VS Pclass\n",
    "***\n",
    "- 从图中可以看到第三等级的人中，存活的人数比率远远低于另外两个等级的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'People survived or not survived  VS Pclass')"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmIAAAFKCAYAAAC+QTMgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8TXfi//H3lRttJCEyltYoVaWK\n0eUR0rTRxZZQsSYEk9q6UFJaFEGo2NOhJKR0uhiq1giGMrVVLRW0inRqtGMpUtIyJFdlu/f3h6/7\nkyKizc0nkdfz8ejjkXPuuZ/7PkcevPs5555jcTgcDgEAAKDIlTEdAAAAoLSiiAEAABhCEQMAADCE\nIgYAAGAIRQwAAMAQihgAAIAhFDHgDzp58qQefvhhtW/f3vlfu3bttHz5cpd8XmJiol555RWXjP17\nvPTSS/r+++8LZazx48crLi6uUMb6I/r06aNz584V6WeOGjVKO3fuLJSx3n//fY0YMSLfbeLj49W3\nb9/r1qekpCggIEBZWVk6e/asBg8erJCQEIWEhCgsLEwbN2684XhxcXF64okn1L59e3Xo0EEhISHq\n1auXjh49mm+OiIgIrV+/vuA7B9xhrKYDAHeCu+++W6tWrXIunzlzRm3btlXDhg1Vr149g8lc7733\n3jMdodDt2LGjyD9z4sSJRfp5Xbp00dy5c5Wamqp7773XuX7JkiUKCwtT2bJlNXr0aD355JN65513\nJEnff/+9unXrplq1aql27drXjdmmTRtFR0c7lxcsWKAhQ4YoMTHR9TsElFDMiAEuULVqVdWsWVPH\njh2TJC1btkydOnVShw4d1KtXL/3www+SpPT0dA0dOlRt27ZVSEiIpk2bppycHElS/fr1NWPGDHXq\n1EnBwcH617/+dd3npKena8SIEerUqZNCQkI0adIk5/uvtXfvXoWGhqpTp07q1KmTNmzYIEkaMWKE\n3n//fed21y43a9ZMgwcPVuvWrbVu3TqFhIQ4t7t48aIaN26sCxcuqFmzZjp48KCGDBmiDz74wLnN\nokWLNHjwYEnS5s2bFRYWpg4dOig8PFxff/21JCkjI0ODBg1SUFCQIiIi9N///veGxzM7O1sxMTFq\n06aNQkJCNGrUKGVkZFyX87PPPsvzvri4OI0YMUJ9+/ZVcHCwevbsqbNnz0qSjhw5ooiICIWEhKhd\nu3ZKSkqSJI0cOVKS1LNnT6WmpuYZ74cfflB4eLg6deqkjh076uOPP3Z+zvjx4/N87tXliIgIDRw4\nUG3atNH8+fPl7++vrKwsSVJubq6aNm2qH374wTkzNH36dMXExDjH+vzzzxUWFiZJ+uqrr9S9e3d1\n7NhRnTt31pYtW5zHZ+zYsWrZsqXCw8P11Vdf3fA4XqtKlSpq1qxZnpJks9n06aefKjw8XJKUlpam\ny5cvy263S5IefPBBJSQkqHz58rccX5ICAgKcM2JpaWl69dVXFRwcrDZt2ugf//jHddu/++67CgsL\nU0hIiFq0aOH887zZcb/ZeqAkoYgBLvD111/rxIkTeuSRR5ScnKykpCR9/PHHSkpK0osvvqiBAwdK\nkiZMmCAfHx+tWbNGK1as0OHDh51lJjc3Vx4eHkpMTNQ777yjqKio606XTZo0SQ0aNFBiYqKSkpJ0\n/vx5ffjhh9fliYuLU+/evZWYmKhJkybpyy+/LNB+1KlTR59++qlat24tm82mgwcPSpL++c9/6pln\nnlGFChWc24aFhWnlypXO5ZUrV6pLly46duyYZsyYoXnz5ikpKUkxMTGKjIzUpUuXNGvWLN19991a\nv369Zs6cedPTWAkJCTp79qxWrVqlVatWyW63a9q0adflbNmy5XXv3bt3r2bOnKn169fLw8NDixcv\nVk5Ojvr376+IiAitWbNG7733nqZPn66vv/5akydPliTNnz8/z0yRdOWU39XyMm/ePO3du9dZUvJT\nvnx5rVu3Tj179lSdOnW0efNmSdL27dtVvXr1PLNLYWFhWrt2rbOsXT2OFy5c0MiRIzVt2jStXLlS\nc+bM0bhx43T69GktWrRIx44d09q1a/XBBx9cVyBvpnv37kpMTNTVB6ysXbtWTZo0UbVq1SRJb775\nphYuXKiAgAD1799ff//733XfffepcuXKtxw7JydHy5cvl7+/vyTprbfe0v3336/169dryZIlWrp0\nqY4fP+7c/tSpU9q5c6cWLFigNWvW6PXXX9esWbMk3fy4/94/D6A44dQkUAguX76s9u3bS7pSoCpW\nrKjY2Fjde++9WrBggY4fP+6cZZCuzCj973//07Zt2/TJJ5/IYrGobNmyCg8P1/z58/Xyyy9Lkv76\n179KkurVq6e6detqz549eT5369atOnjwoPN6tMuXL98wX+vWrTV+/Hht3rxZTz75pN54440C7Zef\n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\nwDWsVquGDx+uzz77TLNmzTIdB/+HGTEApV5qaqpeeOEFtW/fXiEhIabjAC4zdepUbdiwQWPGjNGl\nS5dMx4EoYgBKuZ9//ll9+vTRsGHDFBoaajoO4BJJSUmaO3euJMnDw0MWi4XT8MUERQxAqfbuu+/q\n4sWLmjNnjiIiIhQREaHLly+bjgUUqlatWunbb79Vjx491LdvX0VFRemuu+4yHQvizvoAAADGMCMG\nAABgCEUMAADAEIoYAACAIRQxAAAAQyhiAAAAhnBnfQB3lJMnTyo4OFi1a9eWxWJRdna2qlSposmT\nJ+uee+65bvvExEQlJydrypQpBtICKO2YEQNwx6lSpYpWrVqlpKQkrV27Vg899JCmTZtmOhYAXIci\nBuCO5+/vryNHjmjnzp1q166dQkJC9MorrygjIyPPdp9++qm6dOmidu3aKTg4WF999ZUk6cMPP1S7\ndu3UoUMHRUdHS5K+++47denSRZ06dVK3bt107Nixot4tAHcAihiAO1p2drY2bNighg0baujQoZo6\ndarWrFmjunXrauXKlc7t7Ha7Fi9erHfffVerV6/Wiy++qHnz5ik3N1dz587VihUrlJiYqOzsbJ05\nc0bz589X7969lZiYqC5dumj//v0G9xJAScU1YgDuOGfPnlX79u0lSVlZWWrUqJG6d++u7777Tg8/\n/LAkaciQIZKuXCMmSWXKlNHs2bO1efNmHT16VMnJySpTpozc3Nz02GOPKTQ0VM2bN1fv3r1VtWpV\nPfPMMxo/fry++OILNWvWTM8995yZnQVQolHEANxxrl4jdq3vvvtOFovFuZyeni6bzeZcttlsCg0N\nVbt27dS4cWM99NBD+vjjjyVJc+bM0f79+7Vt2za9+OKLevvttxUcHKzHHntMW7Zs0UcffaStW7dq\nwoQJRbODAO4YFDEApUKtWrX0yy+/6Pvvv9eDDz6ov//975KkmjVrSpKOHTsmi8Wifv36yeFw6M03\n31Rubq7OnTunHj16aPny5Xrsscf0008/6fDhw1q0aJHatm2r8PBw1a5dW5MnTza5ewBKKIoYgFLh\nrrvuUmxsrN58801lZ2erRo0amjZtmjZs2CBJqlevnh5++GG1bt1aFotFgYGB2rdvn3x9fdW1a1eF\nhobKw8NDtWrVUufOndW4cWONGjVKs2fPlru7u8aNG2d2BwGUSBaHw+EwHQIAAKA04luTAAAAhlDE\nAAAADKGIAQAAGEIRAwAAMIQiBgAAYAhFDAAAwBCKGAAAgCEUMQAAAEP+Hyjt7F0qQHCwAAAAAElF\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f838de97f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10,5))\n",
    "sns.countplot(x='Pclass',hue='Survived',data=df_s).set_title('People survived or not survived  VS Pclass')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Survived VS Fare"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'Fare Distribution-Survived VS not Survived')"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n4fF4Cp2GlJhwOEwkEiEajXLXXXfxta99rdApSYnweDx84xvf4N5772XevHmFTkdKwG9/+1v69u17\n8kP1YqdmzyEPP/wwCxYsYMGCBWQymUKnIyUmEokQi8VOfm/btm7QRaRXO3r0KF/84he56aabuPHG\nGwudjpSQ73znOyxZsoRvf/vbdHd3FzodKXKLFy9m9erVLFiwgG3btvGNb3yD5ubmQqd11nR36JB/\n/Md/LHQKUsKmTZvGsmXLuO6669iwYQN1dXWFTklE5JRaWlr48pe/zMKFC5k5c2ah05ES8eyzz9LU\n1MSdd95JMBjEsixNEZZz9stf/vLknxcsWMA999xDVVVVATM6N2r2RIrQ1VdfzapVq5g/fz7GGO6/\n//5CpyQickqPPfYYnZ2dPPLIIzzyyCNAdjOgUtj8QArnmmuu4e677+b2228nnU7zzW9+E7/fX+i0\nRHoVyxhjCp2EiIiIiIiI5JbW7ImIiIiIiJQgNXsiIiIiIiIlSM2eiIiIiIhICVKzJyIiIiIiUoLU\n7ImIiIiIiJQgHb0gIiLyMQ4dOsS1117LqFGjPvL4Y489xqBBgwqUlYiIyOlTsyciInIKAwYM4Lnn\nnit0GiIiImdFzZ6IiMgZ2LlzJ/feey/d3d20trbyN3/zN9x66618//vfZ8OGDRw9epQ77riDWbNm\ncc8999De3k4gEODb3/429fX1hU5fRETOI2r2RERETuH48ePcdNNNJ7+/8cYbaWpq4u/+7u+YOXMm\nBw8e5NOf/jS33norAMlkkj/84Q8AzJ8/n4ULF1JfX8/u3bv5+7//e5YsWVKQ30NERM5PavZERERO\n4eOmcWYyGV577TV+9KMfsXPnTrq7u08+N3nyZABisRibN2/m7rvvPvlcd3c3bW1t9OnTJz/Ji4jI\neU/NnoiIyBn42te+Rnl5OXPnzuW6667jhRdeOPlcIBAAwLZtfD7fRxrFY8eOUVlZmfd8RUTk/KWj\nF0RERM7AqlWruOuuu7jqqqtYuXIlkB3t+7CysjJGjBhxstlbtWoVt99+e95zFRGR85tG9kRERM7A\nV7/6VW677Tb8fj/jxo1jyJAhHDp06E/+3r/+679yzz338NOf/hSv18vDDz+MZVkFyFhERM5XljHG\nFDoJERERERERyS1N4xQRERERESlBavZERERERERKkJo9ERERERGREqRmT0REREREpASp2RMRERER\nESlBavZERERERERKkJo9ERERERGREqRmT0REREREpAT9f6tMnG8To7pZAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f83a68bb70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(15,5))\n",
    "sns.set(palette='muted',color_codes=True)\n",
    "ax=sns.kdeplot(data=df_s.loc[df_s['Survived']==0]['Fare'],color='r',shade=True,label='not Survived')\n",
    "ax=sns.kdeplot(data=df_s.loc[df_s['Survived']==1]['Fare'],color='b',shade=True,label='Survived')\n",
    "ax.set(xlabel='Fare',ylabel='Frequency')\n",
    "plt.title(\"Fare Distribution-Survived VS not Survived\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler, StandardScaler\n",
    "x_predict=df_test\n",
    "# 1. min max scaler\n",
    "min_max_scaler = MinMaxScaler()\n",
    "x_predict_min_max_scaled = min_max_scaler.fit_transform(x_predict)\n",
    "\n",
    "# 2. standard scaler\n",
    "std_scaler = StandardScaler()\n",
    "x_predict_std_scaled = std_scaler.fit_transform(x_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# 建立模型进行测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.76106542  0.16314732  0.05510666  0.0124438   0.00823681  0.          0.        ]\n",
      "Index(['title', 'Pclass', 'Fare', 'Age', 'IsAlone', 'Sex', 'Embarked'], dtype='object')\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split#划分训练集和测试集\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "from sklearn.neural_network import MLPClassifier\n",
    "import pickle\n",
    "from sklearn.neural_network import MLPClassifier\n",
    "from sklearn.ensemble import AdaBoostClassifier\n",
    "X=df_s.drop(['Survived'],axis=1)\n",
    "y=df_s['Survived']\n",
    "x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=1/4,random_state=0)\n",
    "\n",
    "dtree = DecisionTreeClassifier(#测试不同属性的重要性\n",
    "    max_depth=3,\n",
    "    class_weight=\"balanced\",\n",
    "    min_weight_fraction_leaf=0.01\n",
    "    )\n",
    "dtree = dtree.fit(x_train,y_train)\n",
    "\n",
    "## plot the importances ##\n",
    "importances = dtree.feature_importances_\n",
    "indices=np.argsort(-importances)\n",
    "feat_names=['Pclass','Age','Fare','Sex']\n",
    "print(importances[indices]) \n",
    "print(df_s.drop(['Survived'],axis=1).columns[indices])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 1. min max scaler\n",
    "min_max_scaler = MinMaxScaler()\n",
    "x_train_min_max_scaled = min_max_scaler.fit_transform(x_train)\n",
    "x_test_min_max_scaled = min_max_scaler.transform(x_test)\n",
    "X_test_min_max_scaled=min_max_scaler.transform(X)#整个数据集\n",
    "# 2. standard scaler\n",
    "std_scaler = StandardScaler()\n",
    "x_train_std_scaled = std_scaler.fit_transform(x_train)\n",
    "x_test_std_scaled = std_scaler.transform(x_test)\n",
    "X_test_std_scaled=std_scaler.transform(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练模型是： KNN    特征没有归一化\n",
      "最优参数： {'n_neighbors': 11}\n",
      "验证集最高得分： 0.814371257485\n",
      "测试集上准确率： 0.820627802691\n",
      "训练模型是： KNN    最小最大归一化\n",
      "最优参数： {'n_neighbors': 12}\n",
      "验证集最高得分： 0.833832335329\n",
      "测试集上准确率： 0.807174887892\n",
      "训练模型是： KNN    标准归一化\n",
      "最优参数： {'n_neighbors': 8}\n",
      "验证集最高得分： 0.812874251497\n",
      "测试集上准确率： 0.816143497758\n",
      "训练模型是： Logist    特征没有归一化\n",
      "最优参数： {'C': 3.2000000000000002}\n",
      "验证集最高得分： 0.815868263473\n",
      "测试集上准确率： 0.766816143498\n",
      "训练模型是： Logist    最小最大归一化\n",
      "最优参数： {'C': 2.9000000000000004}\n",
      "验证集最高得分： 0.814371257485\n",
      "测试集上准确率： 0.775784753363\n",
      "训练模型是： Logist    标准归一化\n",
      "最优参数： {'C': 0.5}\n",
      "验证集最高得分： 0.814371257485\n",
      "测试集上准确率： 0.775784753363\n",
      "训练模型是： SVC    特征没有归一化\n",
      "最优参数： {'C': 1.8000000000000003}\n",
      "验证集最高得分： 0.824850299401\n",
      "测试集上准确率： 0.784753363229\n",
      "训练模型是： SVC    最小最大归一化\n",
      "最优参数： {'C': 4.7999999999999998}\n",
      "验证集最高得分： 0.826347305389\n",
      "测试集上准确率： 0.789237668161\n",
      "训练模型是： SVC    标准归一化\n",
      "最优参数： {'C': 2.6000000000000001}\n",
      "验证集最高得分： 0.826347305389\n",
      "测试集上准确率： 0.811659192825\n",
      "训练模型是： DT    特征没有归一化\n",
      "最优参数： {'max_depth': 5}\n",
      "验证集最高得分： 0.805389221557\n",
      "测试集上准确率： 0.807174887892\n",
      "训练模型是： DT    最小最大归一化\n",
      "最优参数： {'max_depth': 5}\n",
      "验证集最高得分： 0.803892215569\n",
      "测试集上准确率： 0.807174887892\n",
      "训练模型是： DT    标准归一化\n",
      "最优参数： {'max_depth': 5}\n",
      "验证集最高得分： 0.805389221557\n",
      "测试集上准确率： 0.807174887892\n",
      "训练模型是： RF    特征没有归一化\n",
      "最优参数： {'n_estimators': 65}\n",
      "验证集最高得分： 0.808383233533\n",
      "测试集上准确率： 0.807174887892\n",
      "训练模型是： RF    最小最大归一化\n",
      "最优参数： {'n_estimators': 89}\n",
      "验证集最高得分： 0.812874251497\n",
      "测试集上准确率： 0.820627802691\n",
      "训练模型是： RF    标准归一化\n",
      "最优参数： {'n_estimators': 78}\n",
      "验证集最高得分： 0.809880239521\n",
      "测试集上准确率： 0.820627802691\n",
      "训练模型是： GBDT    特征没有归一化\n",
      "最优参数： {'learning_rate': 0.20099999999999996}\n",
      "验证集最高得分： 0.829341317365\n",
      "测试集上准确率： 0.825112107623\n",
      "训练模型是： GBDT    最小最大归一化\n",
      "最优参数： {'learning_rate': 0.20099999999999996}\n",
      "验证集最高得分： 0.830838323353\n",
      "测试集上准确率： 0.825112107623\n",
      "训练模型是： GBDT    标准归一化\n",
      "最优参数： {'learning_rate': 0.20099999999999996}\n",
      "验证集最高得分： 0.829341317365\n",
      "测试集上准确率： 0.820627802691\n"
     ]
    }
   ],
   "source": [
    "data={'特征没有归一化':[x_train,y_train,x_test,y_test],\\\n",
    "      '最小最大归一化':[x_train_min_max_scaled, y_train,x_test_min_max_scaled,y_test],\\\n",
    "      '标准归一化':[x_train_std_scaled,y_train,x_test_std_scaled, y_test]}\n",
    "model_dict ={KNeighborsClassifier():{'n_neighbors': np.arange(1,16,1)},\\\n",
    "             LogisticRegression():{'C': np.arange(0.1, 4,0.1)},\\\n",
    "             SVC():{'C':  np.arange(0.1,5,0.1)},\\\n",
    "             DecisionTreeClassifier():{'max_depth': np.arange(3,10,1)},\\\n",
    "             RandomForestClassifier():{'n_estimators': np.arange(60,100,1)},\n",
    "             GradientBoostingClassifier():{'learning_rate': np.arange(0.001,0.3,0.01)}}\n",
    "name=['KNN','Logist','SVC','DT','RF','GBDT']\n",
    "i=0\n",
    "for model,parameters in model_dict.items():\n",
    "    for key,item in data.items():\n",
    "        clf=GridSearchCV(model,parameters,cv=6,scoring='accuracy')\n",
    "        clf.fit(item[0],item[1])\n",
    "        print('训练模型是：',name[i],'  ',key)\n",
    "        print('最优参数：', clf.best_params_)\n",
    "        print('验证集最高得分：', clf.best_score_)\n",
    "        best_model = clf.best_estimator_\n",
    "        test_acc=best_model.score(item[2], item[3])\n",
    "        print('测试集上准确率：', test_acc)\n",
    "\n",
    "        with open(r'D:\\Data\\model\\{}.pkl'.format(model_name+key),'wb') as obj:\n",
    "            pickle.dump(best_model,obj)\n",
    "    i=i+1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 821,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# predict_result=pd.DataFrame(columns=['PassengerId','Survived'])#建立预测表格\n",
    "# predict_result['PassengerId']=passengerId\n",
    "# predict_tem=pd.DataFrame()#各种模型的预测结果\n",
    "\n",
    "# KNN=KNeighborsClassifier(n_neighbors=11)\n",
    "# KNN.fit(X,y)\n",
    "# KNN_pre=KNN.predict(x_predict)\n",
    "# predict_tem['KNN']=KNN_pre\n",
    "\n",
    "# LR=LogisticRegression(C=0.5)\n",
    "# LR.fit(X_test_std_scaled,y)\n",
    "# LR_pre=LR.predict(x_predict_std_scaled)\n",
    "# predict_tem['LR']=LR_pre\n",
    "\n",
    "# SVM=SVC(C=2.6000000000000001)\n",
    "# SVM.fit(X_test_std_scaled,y)\n",
    "# SVM_pre=LR.predict(x_predict_std_scaled)\n",
    "# predict_tem['SVM']=SVM_pre\n",
    "\n",
    "# DT=DecisionTreeClassifier(max_depth=5)\n",
    "# DT.fit(X_test_std_scaled,y)\n",
    "# DT_pre=DT.predict(x_predict_std_scaled)\n",
    "# predict_tem['DT']=DT_pre\n",
    "\n",
    "# RF=RandomForestClassifier(n_estimators=79)\n",
    "# RF.fit(X_test_min_max_scaled,y)\n",
    "# RF_pre=RF.predict(x_predict_min_max_scaled)\n",
    "# predict_tem['RF']=RF_pre\n",
    "\n",
    "# GBDT=GradientBoostingClassifier(learning_rate=0.20099999999999996)\n",
    "# GBDT.fit(X_test_min_max_scaled,y)\n",
    "# GBDT_pre=GBDT.predict(x_predict_min_max_scaled)\n",
    "# predict_tem['GBDT']=GBDT_pre\n",
    "\n",
    "# # ann_model = MLPClassifier(hidden_layer_sizes=[40, 40,40], activation='tanh', alpha=1,\n",
    "# #                                   solver='lbfgs', random_state=0)\n",
    "# # ann_model.fit(X_test_min_max_scaled,y)\n",
    "# # ann_model_pre=ann_model.predict(x_predict_min_max_scaled)\n",
    "# # predict_tem['ann_model']=ann_model_pre\n",
    "\n",
    "# adbt=AdaBoostClassifier(DecisionTreeClassifier(max_depth=5, min_samples_split=20, min_samples_leaf=5),\n",
    "#                          algorithm=\"SAMME\",\n",
    "#                          n_estimators=190, learning_rate=0.160)\n",
    "# adbt.fit(X_test_min_max_scaled,y)\n",
    "# adbt_pre=adbt.predict(x_predict)\n",
    "# predict_tem['adbt']=adbt_pre\n",
    "\n",
    "# predict_tem['SUM']=predict_tem.sum(axis=1)\n",
    "# predict_tem.drop(['KNN','LR','SVM','DT','RF','GBDT','adbt'],axis=1,inplace=True)\n",
    "# predict_tem[predict_tem<=5]=0\n",
    "# predict_tem[predict_tem>=6]=1\n",
    "# predict_result['Survived']=predict_tem['SUM']\n",
    "# predict_result\n",
    "# predict_result.to_csv(r'.\\Titanic Machine Learning from Disaster\\QuanTiresult_predict.csv',index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# activations = ['relu', 'logistic', 'tanh']\n",
    "# alphas = [0.01, 0.1, 1, 10]\n",
    "\n",
    "# results_df = pd.DataFrame(index=activations, columns=alphas)\n",
    "\n",
    "# for activation in activations:\n",
    "#     print('激活函数：{}'.format(activation))\n",
    "#     for alpha in alphas:\n",
    "#         ann_model = MLPClassifier(hidden_layer_sizes=[40, 40,40], activation=activations, alpha=alphas,\n",
    "#                                   solver='lbfgs', random_state=0)\n",
    "#         ann_model.fit(x_train, y_train)\n",
    "#         print('alpha：{}'.format(alpha))\n",
    "#         acc = ann_model.score(x_test, y_test)\n",
    "#         print('准确率：{:.3f}'.format(acc))\n",
    "\n",
    "# # results_df.loc[activation, alpha] = acc * 100\n",
    "# # with open(r'D:\\Data\\model\\神经网络.pkl','wb') as obj:\n",
    "# #         pickle.dump(ann_model,obj)\n",
    "# # print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.847533632287\n"
     ]
    }
   ],
   "source": [
    "adbt=AdaBoostClassifier(DecisionTreeClassifier(max_depth=5, min_samples_split=20, min_samples_leaf=5),\n",
    "                         algorithm=\"SAMME\",\n",
    "                         n_estimators=190, learning_rate=0.16)\n",
    "adbt.fit(x_train,y_train)\n",
    "print(adbt.score(x_test,y_test))\n",
    "adbt_pre=adbt.predict(x_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 组合各种模型进行预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "\n",
    "predict_result=pd.DataFrame(columns=['PassengerId','Survived'])#建立预测表格\n",
    "predict_result['PassengerId']=passengerId\n",
    "\n",
    "predict_tem=pd.DataFrame()#各种模型的预测结果\n",
    "with open(r'.\\model\\kNN特征没有归一化.pkl','rb') as obj:\n",
    "    model_KNN=pickle.load(obj)\n",
    "predict=model_KNN.predict(x_predict)\n",
    "predict_tem['KNN']=predict\n",
    "\n",
    "with open(r'.\\model\\LR标准归一化.pkl','rb') as obj:\n",
    "    model_LR=pickle.load(obj)\n",
    "predict=model_LR.predict(x_predict_std_scaled)\n",
    "predict_tem['LR']=predict\n",
    "\n",
    "with open(r'.\\model\\SVM标准归一化.pkl','rb') as obj:\n",
    "    model_SVM=pickle.load(obj)\n",
    "predict=model_SVM.predict(x_predict_std_scaled)\n",
    "predict_tem['SVM']=predict\n",
    "\n",
    "with open(r'.\\model\\DT特征没有归一化.pkl','rb') as obj:\n",
    "    model_DT=pickle.load(obj)\n",
    "predict=model_DT.predict(x_predict_std_scaled)\n",
    "predict_tem['DT']=predict\n",
    "\n",
    "with open(r'.\\model\\RF最小最大归一化.pkl','rb') as obj:\n",
    "    model_RF=pickle.load(obj)\n",
    "predict=model_RF.predict(x_predict_min_max_scaled)\n",
    "predict_tem['RF']=predict\n",
    "\n",
    "with open(r'.\\model\\GBDT标准归一化.pkl','rb') as obj:\n",
    "    model_GBDT=pickle.load(obj)\n",
    "predict=model_GBDT.predict(x_predict_std_scaled)\n",
    "predict_tem['GBDT']=predict\n",
    "\n",
    "# with open(r'.\\model\\神经网络.pkl','rb') as obj:\n",
    "#     model_MLPC=pickle.load(obj)\n",
    "# predict=model_MLPC.predict(x_predict)\n",
    "# predict_tem['MLPC']=predict\n",
    "\n",
    "predict_tem['ADBT']=adbt_pre\n",
    "predict_tem['SUM']=predict_tem.sum(axis=1)\n",
    "predict_tem.drop(['KNN','LR','SVM','DT','RF','GBDT','ADBT'],axis=1,inplace=True)\n",
    "predict_tem[predict_tem<=5]=0\n",
    "predict_tem[predict_tem>=6]=1\n",
    "predict_result['Survived']=predict_tem['SUM']\n",
    "predict_result\n",
    "predict_result.to_csv(r'.\\Titanic Machine Learning from Disaster\\result_predict.csv',index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 817,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#组合预测\n",
    "df1=pd.read_csv(r'.\\Titanic Machine Learning from Disaster\\0.7325gender_submission.csv')\n",
    "df2=pd.read_csv(r'.\\Titanic Machine Learning from Disaster\\0.77511gender_submission.csv')\n",
    "df3=pd.read_csv(r'.\\Titanic Machine Learning from Disaster\\0.77990result_predict.csv')\n",
    "df4=pd.read_csv(r'.\\Titanic Machine Learning from Disaster\\result_predict.csv')\n",
    "predict_result=pd.DataFrame(columns=['PassengerId','Survived'])#建立预测表格\n",
    "predict_result['PassengerId']=passengerId\n",
    "predict_tem=pd.DataFrame()#各种模型的预测结果\n",
    "predict_tem['one']=df1['Survived']\n",
    "predict_tem['two']=df2['Survived']\n",
    "predict_tem['three']=df3['Survived']\n",
    "predict_tem['four']=df4['Survived']\n",
    "predict_tem['SUM']=predict_tem.sum(axis=1)\n",
    "predict_tem.drop(['one','two','three','four'],axis=1,inplace=True)\n",
    "predict_tem[predict_tem<=6]=0\n",
    "predict_tem[predict_tem>=7]=1\n",
    "predict_result['Survived']=predict_tem['SUM']\n",
    "predict_result\n",
    "predict_result.to_csv(r'.\\Titanic Machine Learning from Disaster\\zongde_result_predict.csv',index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
